package professor;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import util.CommandLineParser;
import weka.core.SerializationHelper;
import analyzers.AnalyzerException;
import analyzers.TweetClassifier;

public class Trainer {
	public static void main(String[] args) throws IOException, AnalyzerException {
		if (args.length != 3) {
			System.err.println("Erro. Os parametros corretos sao: "
					+ "<dirArquivos> <classe> <tipoAnalisador>. "
					+ "Onde classe=feliz|triste|neutro e "
					+ "tipoAnalisador=net|naive|outro");
			return;
		}

		String diretorioArquivos = args[0];
		String classe = args[1];
		String tipoAnalisador = args[2];

		TweetClassifier classificador = CommandLineParser
				.getClassificadorFromCommand(tipoAnalisador);

		File diretorio = new File(diretorioArquivos);
		System.out.println("Comecar a treinar o classificador do tipo <"
				+ tipoAnalisador + "> com os arquivos do diretorio <"
				+ diretorioArquivos + ">. Os tweets sao do tipo <" + classe
				+ ">.");

		for (File f : diretorio.listFiles()) {
			if (f.isHidden() || !f.getName().endsWith(".in")) {
				continue;
			}
			System.out.println("Treinando o arquivo atual " + f.getName());
			BufferedReader bf = new BufferedReader(new InputStreamReader(
					new FileInputStream(f), "UTF-8"));
			while (true) {
				String tweet = bf.readLine();
				if (tweet == null) {
					break;
				}
				tweet = tweet.toLowerCase();
				classificador.train(tweet, classe);
			}
			System.out.println("Fim do treino com o arquivo " + f.getName());
		}

		try {
			System.out.println("Salvando o modelo treinado (" + classificador.getModelLocation() + ")");
			SerializationHelper.write(classificador.getModelLocation(),
					classificador);
			System.out.println("Modelo salvo com sucesso!!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
